package org.example.batchutils.processor;

import com.baomidou.dynamic.datasource.processor.DsProcessor;
import org.aopalliance.intercept.MethodInvocation;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Arrays;


public class DsHeaderProcessor extends DsProcessor {

    private static final String HEADER_PREFIX = "#param";

    @Override
    public boolean matches(String key) {
        System.out.println("匹配key参数：" + key);
        System.out.println(key.startsWith(HEADER_PREFIX));
        return key.startsWith(HEADER_PREFIX);
    }

    @Override
    public String doDetermineDatasource(MethodInvocation invocation, String key) {
        // 获取方法参数
        if (key.startsWith(HEADER_PREFIX)) {
            String paramName = key.substring(7); // 如 "poolName"
            Object[] arguments = invocation.getArguments();

            // 通过反射获取方法参数名（需要编译时保留参数名信息）
            Method method = invocation.getMethod();
            Parameter[] parameters = method.getParameters();
            System.out.println("参数列表：" + Arrays.toString(parameters));
            // 根据参数名匹配
            for (int i = 0; i < parameters.length; i++) {
                System.out.println("参数名：" + parameters[i].getName());
                if (paramName.equals(parameters[i].getName())) {
                    System.out.println("匹配到参数：" + arguments[i]);
                    return arguments[i] != null ? arguments[i].toString() : null;
                }
            }
        }

        return null;
    }
}
